/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Servlets;

import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;

import com.akcess.exception.*;
import java.io.*;
import java.net.*;
import com.akcess.vo.*;
import manejadores.*;
import java.sql.*;

/**
 *
 * @author Alejandro
 */
public class GestionarSolicitudes_de_Registro extends HttpServlet {

    private static final String dirBASE = "jsp/SolicitudRegistro";
    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            /* TODO output your page here
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet GestionarSolicitudes_de_Registro</title>");  
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet GestionarSolicitudes_de_Registro at " + request.getContextPath () + "</h1>");
            out.println("</body>");
            out.println("</html>");
             */
        } finally {
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //Saco el parametro hacer para saber que solicitud se hara, si es de reserva o registro.
        this.doPost(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String accion = request.getParameter("hacer");
        request.setAttribute("modulo", "Solicitudes de Registro");
        
        if (accion.equals("registro")) {// Para que esta esto aca?
            response.sendRedirect("SolicitudRegistro.jsp");
        }
        if (accion.equals("Listar")) {
            RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE+"/ListarSolicitudRegistro.jsp");
            dispatcher.forward(request, response);
        }
        if (accion.equals("crear")) {           
                this.CrearSolicitudRegistro(request, response);   
                RequestDispatcher dispatcher = request.getRequestDispatcher("jsp/login.jsp");
                dispatcher.forward(request, response);
        }
        if (accion.equals("Ver")) {
            RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE+"/VerSolicitudRegistro.jsp");
            dispatcher.forward(request, response);
        }
        if (accion.equals("Aprobar")) {
            RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE+"/ListarAprobarRegistro.jsp");
            dispatcher.forward(request, response);
        }
        if (accion.equals("Rechazar")) {
            RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE+"/ListarRechazarRegistro.jsp");
            dispatcher.forward(request, response);
        }
        if (accion.equals("opAprobar")) {
            this.AprobarSolicitud(request,response);
            RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE+"/ListarAprobarRegistro.jsp");
            dispatcher.forward(request, response);
        }
        if (accion.equals("opRechazar")) {
            this.RechazarSolicitud(request,response);
            RequestDispatcher dispatcher = request.getRequestDispatcher(this.dirBASE+"/ListarRechazarRegistro.jsp");
            dispatcher.forward(request, response);
        }

    }

    /** 
     * Returns a short description of the servlet.
     */
    public String getServletInfo() {
        return "Short description";
    }
    // </editor-fold>
    
    /**
     * Con este metodo podemos agregar una nueva solicitud de registro para el acceso a las funcinalidades del Sistema.
     * Del request obtenemos todos los datos ingresados en el formulario y que son necesarios para poder crear la solicitud,
     * datos como: Nombre, Apellido, Nro.Doc., Nombre Operativo, Contraseña, etc.
     * @param request
     * @param response
     * @throws javax.servlet.ServletException
     * @throws java.io.IOException
     */
    protected void CrearSolicitudRegistro(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            Solicitud_registro solicitud = new Solicitud_registro();
            int idtipodoc = Integer.parseInt(request.getParameter("idtipodoc"));
            String nrodoc = request.getParameter("Numero_de_Documento");
            String nombre = request.getParameter("Nombre");
            String apellido = request.getParameter("Apellido");
            String nombreoperativo = request.getParameter("Nombre_Operativo");
            String contrasena = request.getParameter("Contrasenha");
            String direccion = request.getParameter("Direccion");
            String telefono = request.getParameter("Telefono");
            String celular = request.getParameter("Celular");
            String fax = request.getParameter("Fax");
            String observacion = request.getParameter("Observacion");
            String email = request.getParameter("Email");
            //Pongo los datos en el objeto solicitud...
            solicitud.setIdtipodoc(idtipodoc);
            solicitud.setNrodoc(nrodoc);
            solicitud.setNombre(nombre);
            solicitud.setApellido(apellido);
            solicitud.setNombreoperativo(nombreoperativo);
            solicitud.setContrasena(contrasena);
            solicitud.setDireccion(direccion);
            solicitud.setTelefono(telefono);
            solicitud.setCelular(celular);
            solicitud.setObservacion(observacion);
            solicitud.setFax(fax);
            solicitud.setEmail(email);

            ConexionDB cone=new ConexionDB();
            cone.ConectarDB();
        //Creo un maneajador de solicitudes, para luego agregar la solicitud a la BD
            ManejadorSolicitudRegistro manejador = new ManejadorSolicitudRegistro(cone.getConxion());
            manejador.CrearSolicitudRegistro(solicitud);
            cone.DesconectarDB();
        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }
    
    /**
     * Mediante este metodo podemos realizar la aprobacion de una solicitud de Registro. El id de la solicitud a ser 
     * aprobada es obtenida del request. Al aprobar dicha solicitud su estado se cambia a "Aprobado" y tambien se crea un usuario
     * mediante los datos que contiene la solicitud y el rol de este nuevo usuario es "Solicitante".
     * @param request
     * @param response
     * @throws javax.servlet.ServletException
     * @throws java.io.IOException
     */
    protected void AprobarSolicitud(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {            
            int idSol = Integer.parseInt(request.getParameter("id"));            
            HttpSession session = request.getSession(false);        
            Usuarios user = null;
            if (session != null) {                
                Connection cone;
                cone = (Connection) session.getAttribute("conexion");
                user= (Usuarios)session.getAttribute("datosUser");
                if (cone != null) {
                    ManejadorSolicitudRegistro manejadorSol = new ManejadorSolicitudRegistro(cone);                    
                    manejadorSol.AceptarSolicitud(idSol,user.getId_usuario());
                }
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    
    /**
     * Este metodo nos permite rechazar una solicitud de registro cualquiera. Esta solicitud cambia su estado a "Rechazado"
     * luego de que termine la operacion del metodo. El id de la solicitud a rechazar se obtiene del request.
     * @param request
     * @param response
     * @throws javax.servlet.ServletException
     * @throws java.io.IOException
     */
    protected void RechazarSolicitud(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {            
            int idSol = Integer.parseInt(request.getParameter("id"));            
            HttpSession session = request.getSession(false);          
            Usuarios user = null;
            if (session != null) {                
                Connection cone;
                cone = (Connection) session.getAttribute("conexion");
                user= (Usuarios)session.getAttribute("datosUser");
                if (cone != null) {
                    ManejadorSolicitudRegistro manejadorSol = new ManejadorSolicitudRegistro(cone);                    
                    manejadorSol.RechazarSolicitud(idSol, user.getId_usuario());
                }
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

